package documentadorrepositorio.componentes;

import documentadorrepositorio.descritoresArtefatos.DescritorArtefato;
import documentadorrepositorio.util.IOUtil;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.DefaultListModel;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JTextField;

/**
 *
 * @author Vinicius
 */
public class PainelConfigArtefatoPresenter {

    private PainelConfigArtefato frame;
    private DescritorArtefato descritor;
    private JTextField campoSiglaDescritorAtual = null;
    private JTextField campoPastaDescritorAtual = null;
    private JTextField campoArquivoDescritorAtual = null;

    public PainelConfigArtefatoPresenter(DescritorArtefato descritor) {
        this.frame = new PainelConfigArtefato();
        this.descritor = descritor;
        adicionarListeners();
        carregarDados();
    }

    private void carregarDados() {
        DefaultListModel modelPastas = new DefaultListModel();
        DefaultListModel modelArquivos = new DefaultListModel();

        for (String s : descritor.getlistaPadroesPastas()) {
            modelPastas.addElement(s);
        }
        for (String s : descritor.getListaPadroesArquivos()) {
            modelArquivos.addElement(s);
        }

        obtemList(0).setModel(modelPastas);
        obtemList(1).setModel(modelArquivos);
        campoSiglaDescritorAtual.setText(descritor.getSigla());
    }

    private JList obtemList(int tipoList) {
        this.campoSiglaDescritorAtual = frame.getTxtSilga();
        this.campoPastaDescritorAtual = frame.getTxtPadraoPasta();
        this.campoArquivoDescritorAtual = frame.getTxtPadraoArquivo();
        if (tipoList == 0) {
            return frame.getLstPastas();
        } else {
            return frame.getLstArquivos();
        }
    }

    public void salvar() throws Exception {
        List<String> pastas = new ArrayList<>();
        List<String> arquivos = new ArrayList<>();
        String sigla = null;
        DefaultListModel listModel = null;

        listModel = ((DefaultListModel) obtemList(0).getModel());
        for (int i = 0; i < listModel.getSize(); i++) {
            pastas.add(listModel.getElementAt(i).toString());
        }
        sigla = campoSiglaDescritorAtual.getText();
        listModel = ((DefaultListModel) obtemList(1).getModel());
        for (int i = 0; i < listModel.getSize(); i++) {
            arquivos.add(listModel.getElementAt(i).toString());
        }
        arquivos.add(0, sigla);

        IOUtil.criaArquivoTexto(descritor.getNomeArquivoDescritorArquivo(), arquivos);
        IOUtil.criaArquivoTexto(descritor.getNomeArquivoDescritorPasta(), pastas);
    }

    private void btnAddPadraoPasta() {
        JList lstPasta = obtemList(0);
        ((DefaultListModel) lstPasta.getModel()).addElement(campoPastaDescritorAtual.getText().toLowerCase());
        campoPastaDescritorAtual.setText("");
    }

    private void btnAddPadraoArquivo() {
        JList lstPasta = obtemList(1);
        ((DefaultListModel) lstPasta.getModel()).addElement(campoArquivoDescritorAtual.getText().toLowerCase());
        campoArquivoDescritorAtual.setText("");
    }

    private void btnRemPadraoPasta() {
        JList lstPasta = obtemList(0);
        if (lstPasta.getSelectedIndex() == -1) {
            JOptionPane.showMessageDialog(frame, "Selecione um padrão para remover.");
        } else {
            ((DefaultListModel) lstPasta.getModel()).removeElementAt(lstPasta.getSelectedIndex());
        }
    }

    private void btnRemPadraoArquivo() {
        JList lstPasta = obtemList(1);
        if (lstPasta.getSelectedIndex() == -1) {
            JOptionPane.showMessageDialog(frame, "Selecione um padrão para remover.");
        } else {
            ((DefaultListModel) lstPasta.getModel()).removeElementAt(lstPasta.getSelectedIndex());
        }
    }

    public PainelConfigArtefato getPainel() {
        return frame;
    }

    public void setPainel(PainelConfigArtefato painel) {
        this.frame = painel;
    }

    private void adicionarListeners() {
        frame.getBtnAddPadraoArquivo().addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                btnAddPadraoArquivo();
            }
        });
        frame.getBtnAddPadraoPasta().addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                btnAddPadraoPasta();
            }
        });
        frame.getBtnRemPadraoArquivo().addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                btnRemPadraoArquivo();
            }
        });

        frame.getBtnRemPadraoPasta().addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                btnRemPadraoPasta();
            }
        });
    }
}